package com.composite.demo1;

import com.composite.demo1.impl.ConcreteCompany;
import com.composite.demo1.impl.FinanceDepartment;

/**
 * 组合模式(Composite Pattern)有时候又叫做部分-整体模式，它使我们树型结构的问题中，模糊了简单元素和复杂元素的概念
 * ，客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。组合模式让你可以优化处理递
 * 归或分级数据结构。有许多关于分级数据结构的例子，使得组合模式非常有用武之地。关于分级数据结构的一个普遍性的例子是你每
 * 次使用电脑时所遇到的:文件系统。文件系统由目录和文件组成。每个目录都可以装内容。目录的内容可以是文件，也可以是目录。
 * 按照这种方式，计算机的文件系统就是以递归结构来组织的。如果你想要描述这样的数据结构，那么你可以使用组合模式Composite。
 *
 * @author Administrator
 *
 */
public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Company root = new ConcreteCompany();
		root.setName("北京总公司");
		root.add(new FinanceDepartment("总公司人力资源部"));
		root.add(new FinanceDepartment("总公司财务部"));
		Company shandongCom = new ConcreteCompany("山东分公司");
		shandongCom.add(new FinanceDepartment("山东分公司人力资源部"));
		shandongCom.add(new FinanceDepartment("山东分公司账务部"));
		Company zaozhuangCom = new ConcreteCompany("枣庄办事处");
		zaozhuangCom.add(new FinanceDepartment("枣庄办事处财务部"));
		zaozhuangCom.add(new FinanceDepartment("枣庄办事处人力资源部"));
		Company jinanCom = new ConcreteCompany("济南办事处");
		jinanCom.add(new FinanceDepartment("济南办事处财务部"));
		jinanCom.add(new FinanceDepartment("济南办事处人力资源部"));
		shandongCom.add(jinanCom);
		shandongCom.add(zaozhuangCom);
		Company huadongCom = new ConcreteCompany("上海华东分公司");
		huadongCom.add(new FinanceDepartment("上海华东分公司人力资源部"));
		huadongCom.add(new FinanceDepartment("上海华东分公司账务部"));
		Company hangzhouCom = new ConcreteCompany("杭州办事处");
		hangzhouCom.add(new FinanceDepartment("杭州办事处财务部"));
		hangzhouCom.add(new FinanceDepartment("杭州办事处人力资源部"));
		Company nanjingCom = new ConcreteCompany("南京办事处");
		nanjingCom.add(new FinanceDepartment("南京办事处财务部"));
		nanjingCom.add(new FinanceDepartment("南京办事处人力资源部"));
		huadongCom.add(hangzhouCom);
		huadongCom.add(nanjingCom);
		root.add(shandongCom);
		root.add(huadongCom);
		root.display(0);
	}

}
